﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
using QLTV_V2.DataAccess;
using QLTV_V2.BussinessObject;

namespace QLTV_V2.BussinessLogic
{
    class BanDocBUS
    {
        ConnectData conn = new ConnectData();
        Utilities uti = new Utilities();
        DataTable tb = new DataTable();
        private string sql;
        
        #region Cac ham select,insert, update, delete
        //Lấy TT ban doc truyen vao ObjectBandoc
        public BanDoc GetBanDoc_Object(string mabandoc)
        {
            BanDoc bd = new BanDoc();
            sql =   "select MaBanDoc, TenBanDoc, NgaySinh, GioiTinh, DiaChi, Email, SoDT, NgayLapThe, NgayHetHan, BanDoc.MaNhom,TenNhom, AnhCaNhan, TTThe "+
                    " from BanDoc,NhomBanDoc where BanDoc.MaNhom=NhomBanDoc.MaNhom and MaBanDoc=N'"+mabandoc+"'";
            try
            {
                DataRow dr = conn.GetDataTable(sql).Rows[0];
                bd.MaBanDoc = dr["MaBanDoc"].ToString();
                bd.TenBanDoc = dr["TenBanDoc"].ToString();
                try
                {
                    bd.NgaySinh = Convert.ToDateTime(dr["NgaySinh"]);
                }
                catch
                {
                }
                bd.GioiTinh = Convert.ToBoolean(dr["GioiTinh"]);
                bd.DiaChi = dr["DiaChi"].ToString();
                bd.Email = dr["Email"].ToString();
                bd.SoDT = dr["SoDT"].ToString();
                bd.NgayLapThe = Convert.ToDateTime(dr["NgayLapThe"]);
                bd.NgayHetHan = Convert.ToDateTime(dr["NgayHetHan"]);
                bd.HinhAnh = dr["AnhCaNhan"].ToString();
                bd.TTThe = dr["TTThe"].ToString();
                bd.MaNhom = dr["MaNhom"].ToString();
            }
            catch
            {

            }
            return bd;
        }
        //Lấy source file mẫu
        public DataTable getSource_FileMau_BanDoc()
        {
            sql = "select top 10 ROW_NUMBER() OVER (Order by MaBanDoc) as 'STT',MaBanDoc as 'Mã thẻ',TenBanDoc as 'Họ và tên', CONVERT(varchar(20),NgaySinh,103) as 'Ngày Sinh', " +
                "(case GioiTinh when 'true' then N'Nam' else N'Nữ' end) as 'Giới tính', DiaChi as 'Địa chỉ',Email as 'Email', SoDT as 'Số ĐT',MaNhom as 'Nhóm' " +
                "from BanDoc";
            return conn.GetDataTable(sql);
        }
        //Lấy Thông tin in thẻ bạn đọc
        public DataTable getDataTable_BanDoc(string mabandoc)
        {
            sql = "select MaBanDoc, TenBanDoc, TenNhom, NgayLapThe, NgayHetHan " +
                  "from BanDoc a join NhomBanDoc b on a.MaNhom=b.MaNhom " +
                  " where MaBanDoc=N'"+mabandoc+"'";
            return conn.GetDataTable(sql);
        }
        //Lấy tên nhóm them mã nhóm
        public string GetTenNhom(string manhom)
        {
            sql = "select TenNhom from NhomBanDoc where MaNhom=N'" + manhom + "'";
            DataRow dr = conn.GetDataTable(sql).Rows[0];
            return dr["TenNhom"].ToString();
        }
        //Insert thẻ bạn đọc
        public bool InsertBandoc(BanDoc bandoc)
        {
            int type = uti.GetTypeDate();
            sql = "insert into BanDoc values('" + bandoc.MaBanDoc.ToString() + "', N'" + bandoc.TenBanDoc.ToString() + "',convert(datetime,'" + bandoc.NgaySinh.ToShortDateString() + "'," + type + "),N'" + bandoc.GioiTinh + "', "+
                  "N'" + bandoc.DiaChi.ToString() + "',N'" + bandoc.Email.ToString() + "',N'" + bandoc.SoDT.ToString() + "',convert(datetime,'" + bandoc.NgayLapThe.ToShortDateString() + "'," + type+ "),convert(datetime,'"+bandoc.NgayHetHan.ToShortDateString()+"',"+type+ "), "+
                  "N'"+bandoc.MaNhom.ToString() + "',N'" + bandoc.HinhAnh.ToString() + "',N'" + bandoc.TTThe + "')";
            if (conn.ExecuteQuery(sql) == true)
            {
                return true;
            }
            return false;
        }
        //Chen danh sach ban doc
        public bool InsertDSBandoc(BanDoc bd)
        {
            int type = uti.GetTypeDate();
            sql = "insert into BanDoc (MaBanDoc,TenBanDoc,NgaySinh,GioiTinh,DiaChi,Email,SoDT,NgayLapThe,NgayHetHan,MaNhom,AnhCaNhan,TTThe) " +
                "values (N'" + bd.MaBanDoc + "',N'" + bd.TenBanDoc + "',NULL,N'" + bd.GioiTinh + "',N'" + bd.DiaChi + "',N'" + bd.Email + "',N'" + bd.SoDT + "', "+
                "convert(datetime,'" + bd.NgayLapThe.ToShortDateString() + "'," + type + "),convert(datetime,'" + bd.NgayHetHan.ToShortDateString() + "'," + type + "),N'" + bd.MaNhom + "',N'" + bd.HinhAnh + "',N'Kích hoạt')";
            if (conn.ExecuteQuery(sql) == true)
                return true;
            return false;
        }
       //Sửa thông tin bạn đọc
        public bool UpdateBandoc(BanDoc bandoc, string dk)
        {
            int type = uti.GetTypeDate();
            sql = "update BanDoc set MaBanDoc=N'" + bandoc.MaBanDoc.ToString() + "',TenBanDoc=N'" + bandoc.TenBanDoc.ToString() + "',NgaySinh=convert(datetime,'" + bandoc.NgaySinh.ToShortDateString() + "'," + type + "), "+
                  "GioiTinh=N'" + bandoc.GioiTinh + "',DiaChi=N'" + bandoc.DiaChi.ToString() + "', Email=N'" + bandoc.Email.ToString() + "',SoDT=N'" + bandoc.SoDT + "',NgayLapThe=convert(datetime,'" + bandoc.NgayLapThe.ToShortDateString() + "'," + type + "), "+
                  "NgayHetHan=convert(datetime,'" + bandoc.NgayHetHan.ToShortDateString() + "'," + type + "),MaNhom=N'" + bandoc.MaNhom.ToString() + "', AnhCaNhan=N'" + bandoc.HinhAnh.ToString() + "',TTThe=N'" + bandoc.TTThe + "' "+
                  "where MaBanDoc=N'" + dk + "'";
            if (conn.ExecuteQuery(sql) == true)
            {
                return true;
            }
            return false;
        }
        //Gia hạn thẻ bạn đọc
        public bool GiaHanBD(string mabandoc, DateTime Ngay)
        {
            int type = uti.GetTypeDate();
            sql = "update BanDoc set NgayHetHan=convert(datetime,'" + Ngay.ToShortDateString() + "'," + type + ") where MaBanDoc=N'"+mabandoc+"'";
            if (conn.ExecuteQuery(sql) == true)
            {
                return true;
            }
            return false;
        }
        #endregion

        #region Kiểm ta trước khi lưu bạn đọc
        //<---------Kiểm tra trước khi lưu---------->
        public bool checkSave(BanDoc bandoc)
        {
            if (bandoc.MaBanDoc.Equals(""))
            {
                MessageBox.Show("Mới nhập mã bạn đọc");
                return false;
            }
            if (bandoc.TenBanDoc.Equals(""))
            {
                MessageBox.Show("Mời nhập tên bạn đọc");
                return false;
            }
            if (bandoc.DiaChi.Equals(""))
            {
                MessageBox.Show("Chưa nhập địa chỉ");
                return false;
            }
            if (bandoc.NgaySinh.ToString().Equals(""))
            {
                MessageBox.Show("Nhập ngày sinh");
                return false;
            }
            if (bandoc.Email != "")//Neu nhap Email
            {
                if (uti.isValidEmail(bandoc.Email) == false)
                {
                    MessageBox.Show("Email không hợp lệ");
                    return false;
                }
            }
            if (bandoc.SoDT != "")
            {
                if (uti.checkDigit(bandoc.SoDT) == false)
                {
                    MessageBox.Show("So DT khong hop le");
                    return false;
                }
            }
            if (bandoc.NgayLapThe.ToString().Equals(""))
            {
                MessageBox.Show("Nhập ngày lập thẻ");
                return false;
            }
            if (bandoc.NgayHetHan.ToString().Equals(""))
            {
                MessageBox.Show("Nhập ngày hết hạn");
                return false;
            }
            return true;
        }
        #endregion

        #region Các hàm cho xử lý vi phạm
        //Insert thông tin vi pham
        public bool InserViPham(ViPham vp)
        { 
            int type=uti.GetTypeDate();
            sql = "insert into PhieuVP values(N'" + vp.MaPhieuVP + "',N'" + vp.MaBanDoc + "',N'" + vp.LyDoVP + "',N'" + vp.XuLy + "',convert(datetime,'" + vp.NgayLap.ToShortDateString() + "'," + type + "),N'" + vp.MaNV + "'," + vp.LoaiXL + ")";
            if (conn.ExecuteQuery(sql) == true)
                return true;
            return false;
        }
        //Sửa thông tin vi phạm
        public bool UpdateViPham(ViPham vp)
        {
            int type = uti.GetTypeDate();
            sql = "update PhieuVP set MaBanDoc=N'" + vp.MaBanDoc + "',LyDoVP=N'" + vp.LyDoVP + "',XuLy=N'" + vp.XuLy + "',NgayLap=convert(datetime,'" + vp.NgayLap.ToShortDateString() + "'," + type + "),MaNV=N'" + vp.MaNV + "',LoaiXL=" + vp.LoaiXL + " where MaPhieuVP=N'" + vp.MaPhieuVP + "'";
            if (conn.ExecuteQuery(sql) == true)
                return true;
            return false;
        }
        //Lay thông tin vi phạm
        public DataTable GetVipham(string ordercolumn)
        {
            sql = "select NgayLap, MaPhieuVP, MaBanDoc as MaBanDoc1, LyDoVP, XuLy, LoaiXL from PhieuVP order by " + ordercolumn;
            return conn.GetDataTable(sql);
        }
        //update trạng thái thẻ -->khóa
        public bool updateTTThe(string mabandoc, bool dk)
        {
            if (dk == true)
                sql = "update BanDoc set TTThe=N'Bị khóa' where MaBanDoc=N'" + mabandoc + "'";
            else
                sql = "update BanDoc set TTThe=N'Kích hoạt' where MaBanDoc=N'" + mabandoc + "'";
            if (conn.ExecuteQuery(sql) == true)
                return true;
            return false;
        }
        //Kiểm tra trước khi lưu
        public bool checkSaveVP(ViPham vp)
        {
            if (vp.MaPhieuVP.Equals(""))
            {MessageBox.Show("Mã phiếu không được bỏ trống");
                return false;
            }
            if (vp.MaBanDoc.Equals(""))
            {
                MessageBox.Show("Chưa nhập mã bạn đọc");
                return false;
            }
            if (vp.LyDoVP.Equals(""))
            {
                MessageBox.Show("Chưa nhập lý do vi phạm");
                    return false;
            }
            if(vp.XuLy.Equals(""))
            {
                MessageBox.Show("Nhập hình thức xử lý");
                return false;
            }
            if(vp.NgayLap.ToShortDateString()=="00/00/0000")
            {
                MessageBox.Show("Ngày tháng không hợp lệ");
                return false;
            }
            return true;
        }
        #endregion
    
    }
}
